home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------------------------------------
-
- zapigrep.cmd (ye olde REXX procedure for OS/2)
-
- Script to search members of a zipfile for a string and print the names of
- any such members (and, optionally, the matching text).
-
- This is the zipgrep.cmd program completely rewritten to take advantage
- of the REXX API. Among the improvements are:
- egrep no longer needed. All work done by API and this script.
- Added option switches.
-
- Be aware, however, that this script does not support regular expressions
- as zipgrep does.
-
- ---------------------------------------------------------------------------*/
-
- PARSE ARG args
-
- nocase = 0
- word = 0
- text = 0
-
- DO WHILE Left(args,1) == '-' | Left(args,1) == '/'
- PARSE VAR args option args
- option = Translate(SubStr(option,2))
- DO WHILE option \= ''
- oneopt = Left(option,1)
- option = SubStr(option,2)
- SELECT
- WHEN oneopt == 'W' THEN
- word = 1
- WHEN oneopt == 'I' THEN
- nocase = 1
- WHEN oneopt == 'T' THEN
- text = 1
- OTHERWISE NOP
- END
- END
- END
-
- PARSE VAR args string zipfile members
-
- IF (string == '') THEN DO
- SAY 'usage: zipgrep [-i][-t][-w] search_string zipfile [members...]'
- SAY ' Displays the names of zipfile members containing a given string.'
- SAY ' By default it displays filenames only of members containing an'
- SAY ' exact match of the string. Options are:'"0a"x
- SAY ' -i Ignore case'
- SAY ' -t Display matching lines'
- SAY ' -w Match words only'
- EXIT 1
- END
- string = Strip(string,'b','"')
- IF nocase THEN string = Translate(string)
-
- CALL RxFuncAdd 'UZLoadFuncs', 'UNZIPAPI', 'UZLoadFuncs'
- CALL UZLoadFuncs
-
- CALL UZUnZipToStem zipfile, 'file.', members
-
- DO i = 1 TO file.0
- ptr = file.i
- file = file.ptr
- IF nocase THEN file = Translate(file)
- IF word THEN DO
- wp = WordPos(string,file)
- IF wp>0 THEN
- scan = WordIndex(file,wp)
- ELSE
- scan = 0
- END
- ELSE
- scan = Pos(string,file)
- IF scan \= 0 THEN DO
- SAY file.i':'
- IF text THEN DO
- DO WHILE scan > 0
- from = LastPos('0a'x,file,scan)+1
- to = Pos('0a'x,file,scan)
- IF to = 0 THEN to = Length(file.ptr)
- oneline = Strip(SubStr(file.ptr,from,to-from),'T','0a'x)
- SAY Strip(oneline,'T','0d'x)
- IF word THEN DO
- wp = WordPos(string,file,wp+1)
- IF wp>0 THEN
- scan = WordIndex(file,wp)
- ELSE
- scan = 0
- END
- ELSE
- scan = Pos(string,file,scan+1)
- END
- END
- END
- END
-
- EXIT 0
-